using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TraceNetworkTools
{
    /// <summary>
    /// <para>Trace</para>
    /// <para>Returns selected features in a trace network based on connectivity or traversability from the specified starting points.</para>
    /// <para>根据指定起点的连通性或可遍历性返回追踪网络中的选定要素。</para>
    /// </summary>    
    [DisplayName("Trace")]
    public class Trace : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Trace()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_trace_network">
        /// <para>Input Trace Network</para>
        /// <para>The trace network on which the trace will be run. When working with an enterprise geodatabase, an input trace network must be from a feature service; a trace network from a database connection is not supported.</para>
        /// <para>将在其上运行跟踪的跟踪网络。使用企业级地理数据库时，输入追踪网络必须来自要素服务;不支持来自数据库连接的跟踪网络。</para>
        /// </param>
        public Trace(object _in_trace_network)
        {
            this._in_trace_network = _in_trace_network;
        }
        public override string ToolboxName => "Trace Network Tools";

        public override string ToolName => "Trace";

        public override string CallName => "tn.Trace";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_trace_network, _trace_type.GetGPValue(), _starting_points, _barriers, _path_direction.GetGPValue(), _shortest_path_network_attribute_name, _include_barriers.GetGPValue(), _validate_consistency.GetGPValue(), _ignore_barriers_at_starting_points.GetGPValue(), _allow_indeterminate_flow.GetGPValue(), _condition_barriers, _function_barriers, _traversability_scope.GetGPValue(), _functions, _output_conditions, _result_types, _selection_type.GetGPValue(), _clear_all_previous_trace_results.GetGPValue(), _trace_name, _aggregated_points, _aggregated_lines, _updated_trace_network, _out_network_layer, _use_trace_config.GetGPValue(), _trace_config_name];

        /// <summary>
        /// <para>Input Trace Network</para>
        /// <para>The trace network on which the trace will be run. When working with an enterprise geodatabase, an input trace network must be from a feature service; a trace network from a database connection is not supported.</para>
        /// <para>将在其上运行跟踪的跟踪网络。使用企业级地理数据库时，输入追踪网络必须来自要素服务;不支持来自数据库连接的跟踪网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Trace Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_trace_network { get; set; }


        /// <summary>
        /// <para>Trace Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of trace to execute.
        ///   <bulletList>
        ///     <bullet_item>Connected—A connected trace that begins at one or more starting points and spans outward along connected features will be used.  </bullet_item><para/>
        ///     <bullet_item>Upstream—An upstream trace that discovers features upstream from a location in the network will be used. This type of trace requires the flow direction to be set.  </bullet_item><para/>
        ///     <bullet_item>Downstream—A downstream trace that discovers features downstream from a location in the network will be used. This type of trace requires the flow direction to be set.  </bullet_item><para/>
        ///     <bullet_item>Shortest path—A shortest path trace that finds the shortest path between two starting points in the network regardless of flow direction will be used. The cost of traversing the path is determined based on the network attribute set for the Shortest Path Network Attribute Name parameter.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定要执行的跟踪类型。
        ///   <bulletList>
        ///     <bullet_item>连接—将使用从一个或多个起点开始并沿连接要素向外延伸的连接追踪。</bullet_item><para/>
        ///     <bullet_item>上游—将使用从网络中某个位置发现上游要素的上游追踪。这种类型的迹线需要设置流向。 </bullet_item><para/>
        ///     <bullet_item>下游 - 将使用下游追踪，用于发现网络中某个位置下游的要素。这种类型的迹线需要设置流向。 </bullet_item><para/>
        ///     <bullet_item>最短路径 - 将使用最短路径追踪，该追踪将查找网络中两个起点之间的最短路径，而不考虑流向。遍历路径的成本是根据为最短路径网络属性名称参数设置的网络属性确定的。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Trace Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _trace_type_value _trace_type { get; set; } = _trace_type_value._CONNECTED;

        public enum _trace_type_value
        {
            /// <summary>
            /// <para>Connected</para>
            /// <para>Connected—A connected trace that begins at one or more starting points and spans outward along connected features will be used.  </para>
            /// <para>连接—将使用从一个或多个起点开始并沿连接要素向外延伸的连接追踪。</para>
            /// </summary>
            [Description("Connected")]
            [GPEnumValue("CONNECTED")]
            _CONNECTED,

            /// <summary>
            /// <para>Upstream</para>
            /// <para>Upstream—An upstream trace that discovers features upstream from a location in the network will be used. This type of trace requires the flow direction to be set.  </para>
            /// <para>上游—将使用从网络中某个位置发现上游要素的上游追踪。这种类型的迹线需要设置流向。 </para>
            /// </summary>
            [Description("Upstream")]
            [GPEnumValue("UPSTREAM")]
            _UPSTREAM,

            /// <summary>
            /// <para>Downstream</para>
            /// <para>Downstream—A downstream trace that discovers features downstream from a location in the network will be used. This type of trace requires the flow direction to be set.  </para>
            /// <para>下游 - 将使用下游追踪，用于发现网络中某个位置下游的要素。这种类型的迹线需要设置流向。 </para>
            /// </summary>
            [Description("Downstream")]
            [GPEnumValue("DOWNSTREAM")]
            _DOWNSTREAM,

            /// <summary>
            /// <para>Shortest path</para>
            /// <para>Shortest path—A shortest path trace that finds the shortest path between two starting points in the network regardless of flow direction will be used. The cost of traversing the path is determined based on the network attribute set for the Shortest Path Network Attribute Name parameter.  </para>
            /// <para>最短路径 - 将使用最短路径追踪，该追踪将查找网络中两个起点之间的最短路径，而不考虑流向。遍历路径的成本是根据为最短路径网络属性名称参数设置的网络属性确定的。 </para>
            /// </summary>
            [Description("Shortest path")]
            [GPEnumValue("SHORTEST_PATH")]
            _SHORTEST_PATH,

        }

        /// <summary>
        /// <para>Starting Points</para>
        /// <para>A feature layer created using the Starting Points tab in the Trace Locations pane, or a table or feature class containing one or more records that represent the starting points of the trace. The TN_Temp_Starting_Points feature class is used by default and is generated in the default geodatabase of the project when you create starting points using the Starting Points tool in the Trace Locations pane.</para>
        /// <para>使用追踪位置窗格中的起点选项卡创建的要素图层，或者包含表示追踪起点的一个或多个记录的表或要素类。默认情况下，将使用TN_Temp_Starting_Points要素类，当您使用追踪位置窗格中的起点工具创建起点时，将在工程的默认地理数据库中生成该要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Starting Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _starting_points { get; set; } = null;


        /// <summary>
        /// <para>Barriers</para>
        /// <para>A table or feature class containing one or more features that represent the barriers of the trace that prevent the trace from traversing beyond that point. The TN_Temp_Barriers feature class is used by default and is generated in the default geodatabase of the project when you create barriers using the Barriers tab in the Trace Locations pane.</para>
        /// <para>包含一个或多个要素的表或要素类，这些要素表示追踪的屏障，这些屏障阻止追踪超过该点。默认情况下，将使用 TN_Temp_Barriers 要素类，当您使用追踪位置窗格中的障碍选项卡创建障碍时，将在工程的默认地理数据库中生成该要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Barriers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _barriers { get; set; } = null;


        /// <summary>
        /// <para>Path Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the direction of the trace path. The cost of traversing the path is determined by the Shortest Path Network Attribute Name parameter value. This parameter is only honored when running a Shortest path trace type.</para>
        ///   <bulletList>
        ///     <bullet_item>NO_DIRECTION—The path between the two starting points, regardless of the direction of flow, will be used. This is the default.</bullet_item><para/>
        ///     <bullet_item>PATH_UPSTREAM—The upstream path between the two starting points will be used.</bullet_item><para/>
        ///     <bullet_item>PATH_DOWNSTREAM—The downstream path between the two starting points will be used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定跟踪路径的方向。遍历路径的成本由最短路径网络属性名称参数值确定。仅当运行“最短路径”跟踪类型时，才支持此参数。</para>
        ///   <bulletList>
        ///     <bullet_item>NO_DIRECTION—无论流动方向如何，都将使用两个起点之间的路径。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>PATH_UPSTREAM—将使用两个起点之间的上游路径。</bullet_item><para/>
        ///     <bullet_item>PATH_DOWNSTREAM—将使用两个起点之间的下游路径。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Path Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _path_direction_value _path_direction { get; set; } = _path_direction_value._NO_DIRECTION;

        public enum _path_direction_value
        {
            /// <summary>
            /// <para>No direction</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("No direction")]
            [GPEnumValue("NO_DIRECTION")]
            _NO_DIRECTION,

            /// <summary>
            /// <para>Upstream path</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Upstream path")]
            [GPEnumValue("PATH_UPSTREAM")]
            _PATH_UPSTREAM,

            /// <summary>
            /// <para>Downstream path</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Downstream path")]
            [GPEnumValue("PATH_DOWNSTREAM")]
            _PATH_DOWNSTREAM,

        }

        /// <summary>
        /// <para>Shortest Path Network Attribute Name</para>
        /// <para>The name of the network attribute used to calculate the path. When running a shortest path trace type, the shortest path is calculated using a numeric network attribute such as shape length. Cost and distance based paths can both be achieved. This parameter is required when running a shortest path trace.</para>
        /// <para>用于计算路径的网络属性的名称。运行最短路径追踪类型时，将使用数字网络属性（如形状长度）计算最短路径。基于成本和距离的路径都可以实现。运行最短路径跟踪时，此参数是必需的。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Shortest Path Network Attribute Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _shortest_path_network_attribute_name { get; set; } = null;


        /// <summary>
        /// <para>Include Barrier Features</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the traversability barrier features will be included in the trace results.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Traversability barrier features will be included in the trace results. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Traversability barrier features will not be included in the trace results.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定追踪结果中是否包括可遍历性障碍要素。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 可穿越性障碍要素将包含在追踪结果中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 追踪结果中不会包括可穿越性障碍要素。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Include Barrier Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _include_barriers_value _include_barriers { get; set; } = _include_barriers_value._true;

        public enum _include_barriers_value
        {
            /// <summary>
            /// <para>INCLUDE_BARRIERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_BARRIERS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_BARRIERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_BARRIERS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Validate Consistency</para>
        /// <para><xdoc>
        ///   <para>Specifies whether an error will be returned if dirty areas are encountered in any of the traversed features. This is the only way to guarantee a trace is passing through features with consistent status in the network. To remove dirty areas, validate the network topology.
        ///   <bulletList>
        ///     <bullet_item>Checked—The trace will return an error if dirty areas are encountered in any of the traversed features. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The trace will return results regardless of whether dirty areas are encountered in any of the traversed features.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在任何遍历要素中遇到脏区时是否返回错误。这是保证跟踪通过网络中状态一致的特征的唯一方法。若要删除脏区，请验证网络拓扑。
        ///   <bulletList>
        ///     <bullet_item>选中 - 如果在任何穿越的要素中遇到脏区，则追踪将返回错误。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>未选中 - 无论在任何穿越要素中是否遇到脏区，追踪都将返回结果。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Validate Consistency")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _validate_consistency_value _validate_consistency { get; set; } = _validate_consistency_value._true;

        public enum _validate_consistency_value
        {
            /// <summary>
            /// <para>VALIDATE_CONSISTENCY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("VALIDATE_CONSISTENCY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_VALIDATE_CONSISTENCY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_VALIDATE_CONSISTENCY")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Ignore Barriers At Starting Points</para>
        /// <para><xdoc>
        ///   <para>Specifies whether barriers in the trace configuration will be ignored for starting points.
        ///   <bulletList>
        ///     <bullet_item>Checked—Barriers at starting points will be ignored in the trace.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Barriers at starting points will not be ignored in the trace. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否忽略跟踪配置中的起点屏障。
        ///   <bulletList>
        ///     <bullet_item>选中 - 起点处的障碍将在追踪中被忽略。</bullet_item><para/>
        ///     <bullet_item>未选中 - 起点处的障碍不会在追踪中被忽略。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Ignore Barriers At Starting Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _ignore_barriers_at_starting_points_value _ignore_barriers_at_starting_points { get; set; } = _ignore_barriers_at_starting_points_value._false;

        public enum _ignore_barriers_at_starting_points_value
        {
            /// <summary>
            /// <para>IGNORE_BARRIERS_AT_STARTING_POINTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_BARRIERS_AT_STARTING_POINTS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_IGNORE_BARRIERS_AT_STARTING_POINTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_IGNORE_BARRIERS_AT_STARTING_POINTS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Allow Indeterminate Flow</para>
        /// <para><xdoc>
        ///   <para>Specifies whether features with indeterminate or uninitialized flow will be traced. This parameter is only honored when running an upstream or downstream trace.
        ///   <bulletList>
        ///     <bullet_item>Checked—Features with indeterminate or uninitialized flow direction will be traced.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Features with indeterminate or uninitialized flow direction will not be traced. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否追踪具有不确定或未初始化流的特征。仅当运行上游或下游跟踪时，才遵循此参数。
        ///   <bulletList>
        ///     <bullet_item>选中—将追踪具有不确定或未初始化的流向的要素。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将不追踪具有不确定或未初始化的流向的要素。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Allow Indeterminate Flow")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _allow_indeterminate_flow_value _allow_indeterminate_flow { get; set; } = _allow_indeterminate_flow_value._false;

        public enum _allow_indeterminate_flow_value
        {
            /// <summary>
            /// <para>TRACE_INDETERMINATE_FLOW</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("TRACE_INDETERMINATE_FLOW")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>IGNORE_INDETERMINATE_FLOW</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_INDETERMINATE_FLOW")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Condition Barriers</para>
        /// <para><xdoc>
        ///   <para>Sets a traversability barrier condition on features based on a comparison to a network attribute. A condition barrier uses a network attribute, an operator and a type, and an attribute value. For example, stop a trace when a feature has the Code attribute equal to the specific value of ArtificialPath. When a feature meets this condition, the trace stops. If you're using more than one attribute, you can use the Combine Using parameter to define an And or an Or condition.</para>
        ///   <para>Condition barrier components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Name—Filter by any network attribute defined in the system.  </bullet_item><para/>
        ///     <bullet_item>Operator—Choose from a number of operators.  </bullet_item><para/>
        ///     <bullet_item>Type—Choose a specific value or network attribute from the value specified in the Name component.  </bullet_item><para/>
        ///     <bullet_item>Value—Provide a specific value for the input attribute type that would cause termination based on the operator value.  </bullet_item><para/>
        ///     <bullet_item>Combine using—Set this value if you have multiple attributes to add. You can combine them using an And or an Or condition.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Operator components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Is equal to—The attribute is equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Does not equal—The attribute is not equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than—The attribute is greater than the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than or equal to—The attribute is greater than or equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than—The attribute is less than the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than or equal to—The attribute is less than or equal to the value.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Type components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Specific Value—Filter by a specific value.  </bullet_item><para/>
        ///     <bullet_item>Network Attribute—Filter by a network attribute.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Combine using components are as follows:
        ///   <bulletList>
        ///     <bullet_item>And—Combine the condition barriers.  </bullet_item><para/>
        ///     <bullet_item>Or—Use if either condition barrier is met.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>根据与网络属性的比较，为要素设置可穿越性屏障条件。条件屏障使用网络属性、运算符和类型以及属性值。例如，当要素的 Code 属性等于 ArtificialPath 的特定值时，停止跟踪。当要素满足此条件时，跟踪将停止。如果使用多个属性，则可以使用“组合使用”参数来定义“和”或“或”条件。</para>
        /// <para>条件屏障组件如下：
        ///   <bulletList>
        ///     <bullet_item>名称 （Name） - 按系统中定义的任何网络属性进行过滤。</bullet_item><para/>
        ///     <bullet_item>运算符 （Operator） - 从多个运算符中进行选择。</bullet_item><para/>
        ///     <bullet_item>类型 - 从“名称”（Name） 组件中指定的值中选取特定值或网络属性。</bullet_item><para/>
        ///     <bullet_item>值 - 根据运算符值为输入属性类型提供导致终止的特定值。</bullet_item><para/>
        ///     <bullet_item>组合使用- 如果要添加多个属性，请设置此值。您可以使用 And 或 Or 条件将它们组合在一起。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>算子组件如下：
        ///   <bulletList>
        ///     <bullet_item>等于- 属性等于值。</bullet_item><para/>
        ///     <bullet_item>不等于 - 属性不等于值。</bullet_item><para/>
        ///     <bullet_item>大于—属性大于值。</bullet_item><para/>
        ///     <bullet_item>大于或等于- 属性大于或等于值。</bullet_item><para/>
        ///     <bullet_item>小于- 属性小于值。</bullet_item><para/>
        ///     <bullet_item>小于或等于- 属性小于或等于值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>类型组件如下：
        ///   <bulletList>
        ///     <bullet_item>特定值 （Specific Value） - 按特定值进行过滤。</bullet_item><para/>
        ///     <bullet_item>网络属性 - 按网络属性进行过滤。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>组合使用组件如下：
        ///   <bulletList>
        ///     <bullet_item>和—组合条件屏障。</bullet_item><para/>
        ///     <bullet_item>或 （Or） - 在满足任一条件障碍时使用。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Condition Barriers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _condition_barriers { get; set; } = null;


        /// <summary>
        /// <para>Function Barriers</para>
        /// <para><xdoc>
        ///   <para>Sets a traversability barrier on features based on a function. Function barriers can be used, for example, to restrict how far the trace travels from the starting point or to set a maximum value to stop a trace. For example, the length of each line traveled is added to the total distance traveled so far. When the total length traveled reaches the value specified, the trace stops.</para>
        ///   <para>Function barrier components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Function—Choose from a number of calculation functions.  </bullet_item><para/>
        ///     <bullet_item>Attribute—Filter by any network attribute defined in the system.  </bullet_item><para/>
        ///     <bullet_item>Operator—Choose from a number of operators.  </bullet_item><para/>
        ///     <bullet_item>Value—Provide a specific value for the input attribute type that, if discovered, will cause the termination.  </bullet_item><para/>
        ///     <bullet_item>Use Local Values—Calculate values in each direction as opposed to an overall global value. For example, a function barrier calculates the sum of shape length in which the trace terminates if the value is greater than or equal to 4. In the global case, after you have traversed two edges with a value of 2, you have already reached a shape length sum of 4, so the trace stops. If local values are used, the local values along each path change, and the trace continues.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Function components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Minimum—The minimum of the input values.  </bullet_item><para/>
        ///     <bullet_item>Maximum—The maximum of the input values.  </bullet_item><para/>
        ///     <bullet_item>Add—The sum of the input values.  </bullet_item><para/>
        ///     <bullet_item>Average—The average of the input values.  </bullet_item><para/>
        ///     <bullet_item>Count—The number of features.  </bullet_item><para/>
        ///     <bullet_item>Subtract—The difference between the input values.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>For example, you have a starting point feature with a value of 20. The next feature has a value of 30. If you use the minimum function, the result is 20, maximum is 30, add is 50, average is 25, count is 2, and subtract is -10.</para>
        ///   <para>Operator components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Is equal to—The attribute is equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Does not equal—The attribute is not equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than—The attribute is greater than the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than or equal to—The attribute is greater than or equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than—The attribute is less than the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than or equal to—The attribute is less than or equal to the value.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Use Local Values components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Checked—Local values will be used.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Global values will be used. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>在基于函数的要素上设置可遍历性障碍。例如，可以使用功能屏障来限制跟踪从起点行进的距离，或设置停止跟踪的最大值。例如，每条行进线的长度将添加到到目前为止的总行进距离中。当行进的总长度达到指定的值时，迹线将停止。</para>
        /// <para>功能屏障组件如下：
        ///   <bulletList>
        ///     <bullet_item>函数 （Function） - 从多个计算函数中进行选择。</bullet_item><para/>
        ///     <bullet_item>属性 - 按系统中定义的任何网络属性进行过滤。</bullet_item><para/>
        ///     <bullet_item>运算符 （Operator） - 从多个运算符中进行选择。</bullet_item><para/>
        ///     <bullet_item>值 - 为输入属性类型提供特定值，如果发现该值将导致终止。</bullet_item><para/>
        ///     <bullet_item>使用局部值 - 计算每个方向的值，而不是整体全局值。例如，函数屏障计算当值大于或等于 4 时，迹线终止的形状长度之和。在全局情况下，遍历值为 2 的两条边后，已达到形状长度总和 4，因此迹线停止。如果使用局部值，则沿每个路径的局部值将更改，并且跟踪将继续。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>功能组件如下：
        ///   <bulletList>
        ///     <bullet_item>最小值 - 输入值的最小值。</bullet_item><para/>
        ///     <bullet_item>最大值 （Maximum） - 输入值的最大值。</bullet_item><para/>
        ///     <bullet_item>添加 - 输入值的总和。</bullet_item><para/>
        ///     <bullet_item>平均值 - 输入值的平均值。</bullet_item><para/>
        ///     <bullet_item>计数 - 要素数。</bullet_item><para/>
        ///     <bullet_item>减法 - 输入值之间的差值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>例如，您有一个值为 20 的起点要素。下一个要素的值为 30。如果使用最小值函数，则结果为 20，最大值为 30，加法为 50，平均值为 25，count 为 2，减法为 -10。</para>
        /// <para>算子组件如下：
        ///   <bulletList>
        ///     <bullet_item>等于- 属性等于值。</bullet_item><para/>
        ///     <bullet_item>不等于 - 属性不等于值。</bullet_item><para/>
        ///     <bullet_item>大于—属性大于值。</bullet_item><para/>
        ///     <bullet_item>大于或等于- 属性大于或等于值。</bullet_item><para/>
        ///     <bullet_item>小于- 属性小于值。</bullet_item><para/>
        ///     <bullet_item>小于或等于- 属性小于或等于值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>使用本地值组件如下所示：
        ///   <bulletList>
        ///     <bullet_item>选中 - 将使用本地值。</bullet_item><para/>
        ///     <bullet_item>未选中—将使用全局值。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Function Barriers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _function_barriers { get; set; } = null;


        /// <summary>
        /// <para>Apply Traversability To</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of traversability that will be applied. Traversability scope determines whether traversability is applied to junctions, edges, or both. For example, in a network of recreational trails, if a condition barrier is defined to stop a trace if a surfacetype attribute contains a value of gravel and the traversability scope is set to junctions only, the trace will not stop even if it encounters an edge feature with this value in the surfacetype field, because the surfacetype attribute is only applicable to edges.</para>
        ///   <bulletList>
        ///     <bullet_item>Both junctions and edges—Traversability will be applied to both junctions and edges. This is the default.</bullet_item><para/>
        ///     <bullet_item>Junctions only—Traversability will be applied to junctions only.</bullet_item><para/>
        ///     <bullet_item>Edges only—Traversability will be applied to edges only.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将应用的可遍历性类型。可遍历性范围确定是将可遍历性应用于交汇点和/或边。例如，在休闲步道网络中，如果将条件障碍定义为停止追踪，并且 surfacetype 属性包含 gravel 值且遍历范围设置为仅交汇点，则即使追踪在 surfacetype 字段中遇到具有此值的边要素，追踪也不会停止，因为 surfacetype 属性仅适用于边。</para>
        ///   <bulletList>
        ///     <bullet_item>交汇点和边 - 可穿越性将应用于交汇点和边。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>仅限交汇点—可穿越性将仅应用于交汇点。</bullet_item><para/>
        ///     <bullet_item>仅边—可遍历性将仅应用于边。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Apply Traversability To")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _traversability_scope_value _traversability_scope { get; set; } = _traversability_scope_value._BOTH_JUNCTIONS_AND_EDGES;

        public enum _traversability_scope_value
        {
            /// <summary>
            /// <para>Both junctions and edges</para>
            /// <para>Both junctions and edges—Traversability will be applied to both junctions and edges. This is the default.</para>
            /// <para>交汇点和边 - 可穿越性将应用于交汇点和边。这是默认设置。</para>
            /// </summary>
            [Description("Both junctions and edges")]
            [GPEnumValue("BOTH_JUNCTIONS_AND_EDGES")]
            _BOTH_JUNCTIONS_AND_EDGES,

            /// <summary>
            /// <para>Junctions only</para>
            /// <para>Junctions only—Traversability will be applied to junctions only.</para>
            /// <para>仅限交汇点—可穿越性将仅应用于交汇点。</para>
            /// </summary>
            [Description("Junctions only")]
            [GPEnumValue("JUNCTIONS_ONLY")]
            _JUNCTIONS_ONLY,

            /// <summary>
            /// <para>Edges only</para>
            /// <para>Edges only—Traversability will be applied to edges only.</para>
            /// <para>仅边—可遍历性将仅应用于边。</para>
            /// </summary>
            [Description("Edges only")]
            [GPEnumValue("EDGES_ONLY")]
            _EDGES_ONLY,

        }

        /// <summary>
        /// <para>Functions</para>
        /// <para><xdoc>
        ///   <para>The calculation function or functions that will be applied to the trace results.</para>
        ///   <para>Functions components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Function—Choose from a number of calculation functions.  </bullet_item><para/>
        ///     <bullet_item>Attribute—Filter by any network attribute defined in the system.  </bullet_item><para/>
        ///     <bullet_item>Filter Name—Filter the function results by attribute name.  </bullet_item><para/>
        ///     <bullet_item>Filter Operator—Choose from a number of operators.  </bullet_item><para/>
        ///     <bullet_item>Filter Type—Choose from a number of filter types.  </bullet_item><para/>
        ///     <bullet_item>Filter Value—Provide a specific value for the input filter attribute.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Function component options are as follows:
        ///   <bulletList>
        ///     <bullet_item>Min—The minimum of the input values.  </bullet_item><para/>
        ///     <bullet_item>Max—The maximum of the input values.  </bullet_item><para/>
        ///     <bullet_item>Add—The sum of the input values.  </bullet_item><para/>
        ///     <bullet_item>Average—The average of the input values.  </bullet_item><para/>
        ///     <bullet_item>Count—The number of features.  </bullet_item><para/>
        ///     <bullet_item>Subtract—The difference between the input values.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>For example, you have a starting point feature with a value of 20. The next feature has a value of 30. If you're using the Min function, the result is 20. Max is 30, Add is 50, Average is 25, Count is 2, and Subtract is -10.</para>
        ///   <para>Filter Operator component options are as follows:
        ///   <bulletList>
        ///     <bullet_item>Is equal to—The attribute is equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Does not equal—The attribute is not equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than—The attribute is greater than the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than or equal to—The attribute is greater than or equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than—The attribute is less than the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than or equal to—The attribute is less than or equal to the value.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Filter Type component options are as follows:
        ///   <bulletList>
        ///     <bullet_item>Specific Value—Filter by a specific value.  </bullet_item><para/>
        ///     <bullet_item>Network Attribute—Filter by a network attribute  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将应用于跟踪结果的一个或多个计算函数。</para>
        /// <para>函数组件如下：
        ///   <bulletList>
        ///     <bullet_item>函数 （Function） - 从多个计算函数中进行选择。</bullet_item><para/>
        ///     <bullet_item>属性 - 按系统中定义的任何网络属性进行过滤。</bullet_item><para/>
        ///     <bullet_item>过滤器名称 （Filter Name） - 按属性名称过滤函数结果。</bullet_item><para/>
        ///     <bullet_item>过滤器运算符 （Filter Operator） - 从多个运算符中进行选择。</bullet_item><para/>
        ///     <bullet_item>过滤器类型 （Filter Type） - 从多种过滤器类型中进行选择。</bullet_item><para/>
        ///     <bullet_item>过滤器值 （Filter Value） - 为输入过滤器属性提供特定值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>功能组件选项如下：
        ///   <bulletList>
        ///     <bullet_item>最小值 - 输入值的最小值。</bullet_item><para/>
        ///     <bullet_item>最大值 （Max） - 输入值的最大值。</bullet_item><para/>
        ///     <bullet_item>添加 - 输入值的总和。</bullet_item><para/>
        ///     <bullet_item>平均值 - 输入值的平均值。</bullet_item><para/>
        ///     <bullet_item>计数 - 要素数。</bullet_item><para/>
        ///     <bullet_item>减法 - 输入值之间的差值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>例如，您有一个值为 20 的起点要素。下一个要素的值为 30。如果使用 Min 函数，则结果为 20。Max 为 30，Add 为 50，Average 为 25，Count 为 2，Subtract 为 -10。</para>
        /// <para>Filter Operator 组件选项如下：
        ///   <bulletList>
        ///     <bullet_item>等于- 属性等于值。</bullet_item><para/>
        ///     <bullet_item>不等于 - 属性不等于值。</bullet_item><para/>
        ///     <bullet_item>大于—属性大于值。</bullet_item><para/>
        ///     <bullet_item>大于或等于- 属性大于或等于值。</bullet_item><para/>
        ///     <bullet_item>小于- 属性小于值。</bullet_item><para/>
        ///     <bullet_item>小于或等于- 属性小于或等于值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>过滤器类型组件选项如下：
        ///   <bulletList>
        ///     <bullet_item>特定值 （Specific Value） - 按特定值进行过滤。</bullet_item><para/>
        ///     <bullet_item>网络属性 - 按网络属性过滤</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Functions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _functions { get; set; } = null;


        /// <summary>
        /// <para>Output Conditions</para>
        /// <para><xdoc>
        ///   <para>The types of features that will be returned based on a network attribute. For example, in a trace configured to filter out everything but Tap features, any traced features that do not have the Tap attribute assigned to them are not included in the results. Any traced features that do are returned in the result selection set.</para>
        ///   <para>Output conditions components are as follows:
        ///   <bulletList>
        ///     <bullet_item>Name—Filter by any network attribute defined in the system.  </bullet_item><para/>
        ///     <bullet_item>Operator—Choose from a number of operators.  </bullet_item><para/>
        ///     <bullet_item>Type—Choose a specific value or network attribute from the value specified in the Name component.  </bullet_item><para/>
        ///     <bullet_item>Value—Provide a specific value for the input attribute type that would cause termination based on the operator value.  </bullet_item><para/>
        ///     <bullet_item>Combine using—Set this value if you have multiple attributes to add. You can combine them using an And or an Or condition.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Operator component options are as follows:
        ///   <bulletList>
        ///     <bullet_item>Is equal to—The attribute is equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Does not equal—The attribute is not equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than—The attribute is greater than the value.  </bullet_item><para/>
        ///     <bullet_item>Is greater than or equal to—The attribute is greater than or equal to the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than—The attribute is less than the value.  </bullet_item><para/>
        ///     <bullet_item>Is less than or equal to—The attribute is less than or equal to the value.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Type component options are as follows:
        ///   <bulletList>
        ///     <bullet_item>Specific Value—Filter by a specific value.  </bullet_item><para/>
        ///     <bullet_item>Network Attribute—Filter by a network attribute.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将基于网络属性返回的要素类型。例如，在配置为过滤除“点击”要素之外的所有内容的追踪中，任何未分配“点击”属性的追踪要素都不会包含在结果中。任何执行此操作的追踪要素都将在结果选择集中返回。</para>
        /// <para>输出条件组件如下：
        ///   <bulletList>
        ///     <bullet_item>名称 （Name） - 按系统中定义的任何网络属性进行过滤。</bullet_item><para/>
        ///     <bullet_item>运算符 （Operator） - 从多个运算符中进行选择。</bullet_item><para/>
        ///     <bullet_item>类型 - 从“名称”（Name） 组件中指定的值中选取特定值或网络属性。</bullet_item><para/>
        ///     <bullet_item>值 - 根据运算符值为输入属性类型提供导致终止的特定值。</bullet_item><para/>
        ///     <bullet_item>组合使用- 如果要添加多个属性，请设置此值。您可以使用 And 或 Or 条件将它们组合在一起。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>运算符组件选项如下：
        ///   <bulletList>
        ///     <bullet_item>等于- 属性等于值。</bullet_item><para/>
        ///     <bullet_item>不等于 - 属性不等于值。</bullet_item><para/>
        ///     <bullet_item>大于—属性大于值。</bullet_item><para/>
        ///     <bullet_item>大于或等于- 属性大于或等于值。</bullet_item><para/>
        ///     <bullet_item>小于- 属性小于值。</bullet_item><para/>
        ///     <bullet_item>小于或等于- 属性小于或等于值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// <para>类型组件选项如下：
        ///   <bulletList>
        ///     <bullet_item>特定值 （Specific Value） - 按特定值进行过滤。</bullet_item><para/>
        ///     <bullet_item>网络属性 - 按网络属性进行过滤。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Conditions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _output_conditions { get; set; } = null;


        /// <summary>
        /// <para>Result Types</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of results that will be returned by the trace.</para>
        ///   <bulletList>
        ///     <bullet_item>Selection— The trace results will be returned as a selection set on the appropriate network features. This is the default.</bullet_item><para/>
        ///     <bullet_item>Aggregated Geometry— The trace results will be aggregated by geometry type and stored in feature classes displayed in layers in the active map.</bullet_item><para/>
        ///     <bullet_item>Network Layers—The trace results will be added to feature layers as a selection set in a group layer.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定跟踪将返回的结果的类型。</para>
        ///   <bulletList>
        ///     <bullet_item>选择- 追踪结果将作为相应网络要素上的选择集返回。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>聚合几何 - 追踪结果将按几何类型聚合，并存储在活动地图图层中显示的要素类中。</bullet_item><para/>
        ///     <bullet_item>网络图层 - 追踪结果将作为图层组中的选择集添加到要素图层中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Result Types")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _result_types { get; set; } = null;


        /// <summary>
        /// <para>Selection Type</para>
        /// <para><xdoc>
        ///   <para>Specifies how the selection will be applied and what to do if a current selection exists.</para>
        ///   <bulletList>
        ///     <bullet_item>New selection—The resulting selection will replace the current selection. This is the default.</bullet_item><para/>
        ///     <bullet_item>Add to the current selection—The resulting selection will be added to the current selection if one exists. If no selection exists, this is the same as the new selection option.</bullet_item><para/>
        ///     <bullet_item>Remove from the current selection—The resulting selection will be removed from the current selection. If no selection exists, this option has no effect.</bullet_item><para/>
        ///     <bullet_item>Select subset from the current selection—The resulting selection will be combined with the current selection. Only records that are common to both remain selected.</bullet_item><para/>
        ///     <bullet_item>Switch the current selection—The resulting selection will be switched. Results that were selected are removed from the current selection, while results that were not selected are added to the current selection. If no selection exists, this is the same as the new selection option.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何应用所选内容以及如果存在当前所选内容时应执行的操作。</para>
        ///   <bulletList>
        ///     <bullet_item>新选区 - 生成的选区将替换当前选区。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>添加到当前选区 - 生成的选区将添加到当前选区（如果存在）。如果不存在选择，则这与新的选择选项相同。</bullet_item><para/>
        ///     <bullet_item>从当前选区移除 - 生成的选区将从当前选区中移除。如果不存在任何选择，则此选项无效。</bullet_item><para/>
        ///     <bullet_item>从当前选择中选择子集 - 生成的选择将与当前选择合并。只有两者共有的记录才会保持选中状态。</bullet_item><para/>
        ///     <bullet_item>切换当前选区 - 将切换生成的选区。已选定的结果将从当前选定内容中删除，而未选定的结果将添加到当前选定内容中。如果不存在选择，则这与新的选择选项相同。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Selection Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _selection_type_value _selection_type { get; set; } = _selection_type_value._NEW_SELECTION;

        public enum _selection_type_value
        {
            /// <summary>
            /// <para>New selection</para>
            /// <para>New selection—The resulting selection will replace the current selection. This is the default.</para>
            /// <para>新选区 - 生成的选区将替换当前选区。这是默认设置。</para>
            /// </summary>
            [Description("New selection")]
            [GPEnumValue("NEW_SELECTION")]
            _NEW_SELECTION,

            /// <summary>
            /// <para>Add to the current selection</para>
            /// <para>Add to the current selection—The resulting selection will be added to the current selection if one exists. If no selection exists, this is the same as the new selection option.</para>
            /// <para>添加到当前选区 - 生成的选区将添加到当前选区（如果存在）。如果不存在选择，则这与新的选择选项相同。</para>
            /// </summary>
            [Description("Add to the current selection")]
            [GPEnumValue("ADD_TO_SELECTION")]
            _ADD_TO_SELECTION,

            /// <summary>
            /// <para>Remove from the current selection</para>
            /// <para>Remove from the current selection—The resulting selection will be removed from the current selection. If no selection exists, this option has no effect.</para>
            /// <para>从当前选区移除 - 生成的选区将从当前选区中移除。如果不存在任何选择，则此选项无效。</para>
            /// </summary>
            [Description("Remove from the current selection")]
            [GPEnumValue("REMOVE_FROM_SELECTION")]
            _REMOVE_FROM_SELECTION,

            /// <summary>
            /// <para>Select subset from the current selection</para>
            /// <para>Select subset from the current selection—The resulting selection will be combined with the current selection. Only records that are common to both remain selected.</para>
            /// <para>从当前选择中选择子集 - 生成的选择将与当前选择合并。只有两者共有的记录才会保持选中状态。</para>
            /// </summary>
            [Description("Select subset from the current selection")]
            [GPEnumValue("SUBSET_SELECTION")]
            _SUBSET_SELECTION,

            /// <summary>
            /// <para>Switch the current selection</para>
            /// <para>Switch the current selection—The resulting selection will be switched. Results that were selected are removed from the current selection, while results that were not selected are added to the current selection. If no selection exists, this is the same as the new selection option.</para>
            /// <para>切换当前选区 - 将切换生成的选区。已选定的结果将从当前选定内容中删除，而未选定的结果将添加到当前选定内容中。如果不存在选择，则这与新的选择选项相同。</para>
            /// </summary>
            [Description("Switch the current selection")]
            [GPEnumValue("SWITCH_SELECTION")]
            _SWITCH_SELECTION,

        }

        /// <summary>
        /// <para>Clear All Previous Trace Results</para>
        /// <para><xdoc>
        ///   <para>Specifies whether content will be truncated from or appended to the feature classes chosen to store aggregated geometry. This parameter is only applicable to the aggregated geometry result type.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The feature classes storing aggregated trace geometry will be truncated. Only the output geometry from the current trace operation will be written. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The output geometry from the current trace operation will be appended to the feature classes storing aggregated geometry.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否从所选用于存储聚合几何的要素类中截断内容或将其追加到要素类中。此参数仅适用于聚合几何结果类型。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 存储聚合追踪几何的要素类将被截断。仅写入当前跟踪操作的输出几何图形。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—当前追踪操作的输出几何将追加到存储聚合几何的要素类中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clear All Previous Trace Results")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _clear_all_previous_trace_results_value _clear_all_previous_trace_results { get; set; } = _clear_all_previous_trace_results_value._true;

        public enum _clear_all_previous_trace_results_value
        {
            /// <summary>
            /// <para>CLEAR_ALL_PREVIOUS_TRACE_RESULTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLEAR_ALL_PREVIOUS_TRACE_RESULTS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_CLEAR_ALL_PREVIOUS_TRACE_RESULTS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_CLEAR_ALL_PREVIOUS_TRACE_RESULTS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Trace Name</para>
        /// <para>The name of the trace operation. This value is stored in the TRACENAME field of the output feature class to assist with identification of the trace results. This parameter is only applicable to the aggregated geometry result type.</para>
        /// <para>跟踪操作的名称。此值存储在输出要素类的 TRACENAME 字段中，以帮助识别追踪结果。此参数仅适用于聚合几何结果类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Trace Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _trace_name { get; set; } = null;


        /// <summary>
        /// <para>Aggregated Points</para>
        /// <para><xdoc>
        ///   <para>An output multipoint feature class containing the aggregated result geometry. By default, the parameter is populated with a system-generated feature class named Trace_Results_Aggregated_Points that will be stored in the project's default geodatabase.</para>
        ///   <para>This feature class will be created automatically if it does not exist. An existing feature class can also be used to store aggregated geometry. If a feature class other than the default is used, it must be a multipoint feature class and contain a string field named TRACENAME. This parameter is only applicable to the aggregated geometry result type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>包含聚合结果几何的输出多点要素类。默认情况下，将使用系统生成的名为 Trace_Results_Aggregated_Points 的要素类填充该参数，该要素类将存储在工程的默认地理数据库中。</para>
        ///   <para>如果此要素类不存在，则将自动创建该要素类。现有要素类也可用于存储聚合几何。如果使用非默认要素类，则该要素类必须为多点要素类，并包含名为 TRACENAME 的字符串字段。此参数仅适用于聚合几何结果类型。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Aggregated Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _aggregated_points { get; set; } = null;


        /// <summary>
        /// <para>Aggregated Lines</para>
        /// <para><xdoc>
        ///   <para>An output polyline feature class containing the aggregated result geometry. By default, the parameter is populated with a system-generated feature class named Trace_Results_Aggregated_Lines that will be stored in the project's default geodatabase.</para>
        ///   <para>This feature class will be created automatically if it does not exist. An existing feature class can also be used to store aggregated geometry. If a feature class other than the default is used, it must be a polyline feature class and contain a string field named TRACENAME. This parameter is only applicable to the aggregated geometry result type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>包含聚合结果几何的输出折线要素类。默认情况下，该参数将使用系统生成的名为 Trace_Results_Aggregated_Lines 的要素类进行填充，该要素类将存储在工程的默认地理数据库中。</para>
        ///   <para>如果此要素类不存在，则将自动创建该要素类。现有要素类也可用于存储聚合几何。如果使用默认要素类以外的要素类，则该要素类必须是折线要素类，并包含名为 TRACENAME 的字符串字段。此参数仅适用于聚合几何结果类型。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Aggregated Lines")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _aggregated_lines { get; set; } = null;


        /// <summary>
        /// <para>Updated Trace Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Trace Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_trace_network { get; set; }


        /// <summary>
        /// <para>Output Group Layer Name</para>
        /// <para><xdoc>
        ///   <para>The name of the output group layer that contains feature layers with selection sets of features returned by the trace. The layer provides access to work with the output of a trace in ModelBuilder and Python.</para>
        ///   <para>This parameter is only applicable to the network layers result type.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出图层组的名称，其中包含要素图层以及追踪返回的要素选择集。该图层提供在模型构建器和 Python 中处理追踪输出的访问权限。</para>
        ///   <para>此参数仅适用于网络图层结果类型。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Group Layer Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_network_layer { get; set; } = null;


        /// <summary>
        /// <para>Use Trace Configuration</para>
        /// <para><xdoc>
        ///   <para>Specifies whether an existing named trace configuration will be used to populate the parameters of the Trace tool.
        ///   <bulletList>
        ///     <bullet_item>Checked—An existing named trace configuration will be used to define the properties of the trace. All parameters except Trace Configuration Name, Starting Points, and Barriers will be ignored.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—An existing named trace configuration will not be used to define the properties of the trace. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>This parameter requires Trace Network Version 2 or later.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否使用现有的命名追踪配置来填充追踪工具的参数。
        ///   <bulletList>
        ///     <bullet_item>选中 - 将使用现有命名追踪配置来定义追踪的属性。除“跟踪配置名称”、“起点”和“障碍”之外的所有参数都将被忽略。 </bullet_item><para/>
        ///     <bullet_item>未选中 - 现有命名追踪配置将不用于定义追踪的属性。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>此参数需要跟踪网络版本 2 或更高版本。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use Trace Configuration")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _use_trace_config_value _use_trace_config { get; set; } = _use_trace_config_value._false;

        public enum _use_trace_config_value
        {
            /// <summary>
            /// <para>USE_TRACE_CONFIGURATION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("USE_TRACE_CONFIGURATION")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_USE_TRACE_CONFIGURATION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_USE_TRACE_CONFIGURATION")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Trace Configuration Name</para>
        /// <para><xdoc>
        ///   <para>The name of the trace configuration that will be used to define the properties of the trace. This parameter is only active when the Use Trace Configuration parameter is checked.</para>
        ///   <para>This parameter requires Trace Network Version 2 or later.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于定义跟踪属性的跟踪配置的名称。仅当选中“使用跟踪配置”参数时，此参数才处于活动状态。</para>
        ///   <para>此参数需要跟踪网络版本 2 或更高版本。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Trace Configuration Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _trace_config_name { get; set; } = null;


        public Trace SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}